import { defineStore } from 'pinia'
import type { RouteRecordRaw } from 'vue-router'
import { useAuthStore } from '@/stores/auth'
import { MENU_FILE_MAP, MenuList } from '@/config/menu'
import { BTN_AUTH_MAP } from '@/config/btn'
import * as sysApi from '@/api/sys'
import * as userApi from '@/api/user'
import { ENUM_YESORNO, ENUM_AUTH_TYPE } from '@/config/enum'
import router, { resetRouter } from '@/router'
import useNotic from '@/hooks/useNotic'
import { DefaultRouterName, LoginRouterName, UseLocalRoutes } from '@/config/global'
import type { ISysState } from './type'

export const useSysStore = defineStore('sys', {
  state: (): ISysState => ({
    hideLayout: false, // 是否隐藏layout
    roleId: -1, // 当前角色id
    roleKey: '', // 当前角色key
    roles: [], // 当前用户可选择的角色
    userInfo: null // 用户信息
  }),
  getters: {},
  actions: {
    /**
     * 获取初始信息: 用户信息、菜单权限、字典
     */
    async initData(routerData?: any) {
      const authStore = useAuthStore()
      // 重置auth
      authStore.initData()
      // 获取用户信息
      this.initUserData()

      // 使用本地路由
      if (UseLocalRoutes) {
        authStore.menuList = MenuList
        resetRouter(authStore.menuList)
        router.push(routerData || { name: DefaultRouterName })
      }
      // 使用后端路由
      else {
        this.initRoutes(routerData)
      }
    },
    /**
     * 获取用户信息
     */
    initUserData() {
      // userApi.getUserInfo().then((res) => {
      //   if (res.success) {
      //     // 用户信息
      //     this.userInfo = res.data.user
      //     //  当前角色id
      //     this.roleId = res.data.user?.roleId || -1
      //     // 当前角色key
      //     const curRoleKeys = res.data.roles || []
      //     this.roleKey = curRoleKeys[0] || ''
      //     // 可选角色
      //     this.roles = res.data.user?.roles || []
      //   }
      // })
    },
    /**
     * 后端路由
     */
    async initRoutes(routerData?: any) {
      // const authStore = useAuthStore()
      // const res: any = await sysApi.getAuthRoutes()
      // // 收集权限按钮
      // let btnList: any[] = []
      // if (res.success) {
      //   // 菜单和目录
      //   let menuList: RouteRecordRaw[] = []
      //   for (let item of res.data?.data ?? []) {
      //     // 按钮
      //     if (item.type == ENUM_AUTH_TYPE['按钮']) {
      //       btnList.push(item.apiUri)
      //     }
      //     // 菜单和目录
      //     else {
      //       // 基础属性
      //       const params: RouteRecordRaw = {
      //         path: item.path,
      //         children: [],
      //         meta: {
      //           label: item.title,
      //           hideMenu: item.hidden == ENUM_YESORNO['是'] ? true : false,
      //           hideTab: item.tabHidden == ENUM_YESORNO['是'] ? true : false,
      //           hideLayout: item.hiddenLayout == ENUM_YESORNO['是'] ? true : false,
      //           keepAlive: item.keepAlive == ENUM_YESORNO['是'] ? true : false,
      //           id: item.id,
      //           pid: item.pid
      //         }
      //       }
      //       // 设置页面component和name
      //       const mapData = MENU_FILE_MAP.find((mapItem) => mapItem.value == item.componentPath)
      //       if (mapData && item.type == ENUM_AUTH_TYPE['菜单']) {
      //         params.component = mapData.component
      //         params.name = mapData.value
      //       }
      //       menuList.push(params)
      //     }
      //   }
      //   // 处理按钮
      //   authStore.btnList = JSON.parse(JSON.stringify(BTN_AUTH_MAP))
      //   authStore.btnList.forEach((item) => {
      //     for (let btnStr of btnList) {
      //       item.show = false
      //       if (btnStr == item.value) {
      //         item.show = true
      //         break
      //       }
      //     }
      //   })
      //   // 处理菜单、目录
      //   authStore.menuList = []
      //   menuList.forEach((item) => {
      //     if (item.component) {
      //       delete item.children
      //     }
      //     if (item.meta?.pid == 0) {
      //       authStore.menuList.push(item)
      //     } else {
      //       for (let cItem of menuList) {
      //         if (item.meta?.pid == cItem.meta?.id) {
      //           cItem.children?.push(item)
      //           break
      //         }
      //       }
      //     }
      //   })
      //   // 重新注册路由
      //   resetRouter(authStore.menuList)
      //   router.push(routerData || { name: DefaultRouterName })
      // } else {
      //   useNotic().error('获取权限失败！')
      //   router.push({ name: LoginRouterName })
      // }
    }
  }
})
